#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void listeCombinsPossibles(int somme,int cases,int tab[][11]);
int minimCase(int nbCase);
int maxiCase(int nbCase);
int main()
{

    int p=0,puiss,f,caseUtilise=0,somme=0;
    int i=0,j=0;
    int tab[513][11]={{0,1,2,3,4,5,6,7,8,9}};
    puiss=pow(2,4);
/*remplir un tableau binaire pour pouvoir
apres extraire les differentes combinaisons possibles*/
for(i=0;i<=512;i++) {tab[i][0]=0;}
for(j=1;j<=9;j++)
{
        puiss=pow(2,j);
    for(i=1;i<=512;i+=puiss)
    {

        f=i+(puiss/2);

       for(p=i;(p<f);p++)
        {
            tab[p][j]=1;
            tab[p+puiss/2][j]=0;
        }
    }
}
/*remplir la 1er colonne par la somme de chaque ligne
et la derniere colonne par le nbre de chiffre utilisés
pour atteindre cette somme*/
for(i=1;i<=512;i+=1)
{
    somme=0;caseUtilise=0;
    for(j=1;j<=9;j+=1)
    {
        if(tab[i][j]==1) {somme+=j;caseUtilise+=1;}
    }
    tab[i][0]=somme;tab[i][10]=caseUtilise;

}
//afficher le tableau du combinaisons
/*for(i=0;i<=512;i++)
{
    for(j=0;j<=10;j++)
    {
    printf("%d ",tab[i][j]);
    }
   printf("\tligne %d\n",i);
}*/
listeCombinsPossibles(8,3,tab);
/*exemple: extraire les differentes combinaison possibles qui permettre
d'obtenir la somme 17  en utilisant seulement 3 cases*/
return 0;
}

void listeCombinsPossibles(int somme,int cases,int tab[][11])
{


    int i,j,b=0;
    FILE *f;
    f=fopen("text.txt","w");
    if(f==NULL){printf("erreur");}
    else{
    for(i=0;i<=512;i++)
    {
        if(tab[i][0]==somme && (tab[i][10]==cases))
        {
            b=1;
            printf("\nvaleurs possibles:");
            for(j=1;j<=9;j++)
            {
            if(tab[i][j]==1) {fprintf(f,"%d ",j);printf("%d ",j);}
            }
            fprintf(f,"\n");
        }
    }
    if(b==0) printf("pas de combinaison possible");

fclose(f);
}
}
/*cette foction permet aussi de stocker les resultats dans un fichiers*/


